//#pragma once
//
//namespace bit
//
//{
//
//
//    template <class T>
//    class Less {
//    public:
//        bool operator()(const T& a, const T& b) {
//            return a < b;
//        }
//    };
//
//    template <class T, class Container = vector<T>, class Compare = Less<T> >
//
//    class priority_queue
//
//    {
//
//    public:
//
//        priority_queue() {}
//
//        template <class InputIterator>
//
//        priority_queue(InputIterator first, InputIterator last)
//            :c(first, last)
//        {
//            make_heap(c.begin(), c.end(),comp);
//            /*int parents = (c.size() - 2) / 2;
//            while (parents >= 0) {
//                AdjustDown(parents--);
//            }*/
//        }
//
//        /*void AdjustDown(int parents) {
//            int child = parents * 2 + 1;
//            while (child < c.size()) {
//                if (child + 1 < c.size() && comp(c[child], c[child + 1])) {
//                    child++;
//                }
//                if (comp(c[parents], c[child]))
//                    swap(c[parents], c[child]);
//                else
//                    break;
//                parents = child;
//                child = parents * 2 + 1;
//            }
//        }
//
//        void AdjustUp(int child) {
//            int parents = (child - 1) / 2;
//            while (child > 0) {
//                if (comp(c[parents], c[child]))
//                    swap(c[parents], c[child]);
//                else
//                    break;
//                child = parents;
//                parents = (child - 1) / 2;
//            }
//        }*/
//
//        bool empty() const {
//            return c.empty();
//        }
//
//        size_t size() const {
//            return c.size();
//        }
//
//        T& top() {
//            return c[0];
//        }
//
//        void push(const T& x) {
//            c.push_back(x);
//            push_heap(c.begin(), c.end(), comp);
//            /*AdjustUp(c.size() - 1);*/
//        }
//
//        void pop() {
//            /*swap(c[0], c[c.size() - 1]);*/
//            pop_heap(c.begin(), c.end(), comp);
//            c.pop_back();
//            /*AdjustDown(0);*/
//        }
//
//    private:
//
//        Container c;
//
//        Compare comp;
//
//    };
//
//};
